package com.je.app.view.popUp;

import java.awt.Color;
import java.awt.Dimension;

import javax.swing.table.DefaultTableModel;
import javax.swing.JLabel;

import java.awt.Font;

import javax.swing.SwingConstants;
import javax.swing.JTextField;
import javax.swing.JButton;

import java.awt.SystemColor;



import javax.swing.JDialog;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.UIManager;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JComboBox;

import java.util.Date;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

import com.je.app.control.ControlTurno;
import com.je.app.view.MainFrame;
import com.je.app.view.MainFrame.MessageType;
import com.toedter.calendar.JDateChooser;

public class ModificarTurno extends JDialog {
	private JTextField fieldHoraInicio;
	private JTextField fieldHoraFin;
	private JTextField textField_3;
	private JTextField fieldMontoTurno;
	private JTextField textField_7;
	private JTextField textField_8;
	private JTable table;
	private JDateChooser dateChooser;
	private JComboBox <String> comboHabitacion;
	
	public ModificarTurno (String[] habitaciones, final String habitacionSeleccionada, Date fecha, String horaEntrada, String horaSalida, String tiempo, String importe, String importeConsumiciones, String total, Object[][] listaConsumiciones) {
		
		setSize(new Dimension(935, 400));		
		getContentPane().setLayout(null);
		setLocationRelativeTo(null);
		setTitle("Modificar turno");
		
		JLabel label = new JLabel("Habitaci\u00F3n:");
		label.setVerticalAlignment(SwingConstants.TOP);
		label.setHorizontalAlignment(SwingConstants.LEFT);
		label.setFont(new Font("Tahoma", Font.PLAIN, 12));
		label.setBounds(30, 47, 133, 26);
		getContentPane().add(label);
		
		JLabel label_1 = new JLabel("Fecha:");
		label_1.setVerticalAlignment(SwingConstants.TOP);
		label_1.setHorizontalAlignment(SwingConstants.LEFT);
		label_1.setFont(new Font("Tahoma", Font.PLAIN, 12));
		label_1.setBounds(30, 79, 133, 26);
		getContentPane().add(label_1);
		
		JLabel label_2 = new JLabel("Hora de Inicio:");
		label_2.setVerticalAlignment(SwingConstants.TOP);
		label_2.setHorizontalAlignment(SwingConstants.LEFT);
		label_2.setFont(new Font("Tahoma", Font.PLAIN, 12));
		label_2.setBounds(30, 111, 133, 26);
		getContentPane().add(label_2);
		
		JLabel label_3 = new JLabel("Hora de Salida:");
		label_3.setVerticalAlignment(SwingConstants.TOP);
		label_3.setHorizontalAlignment(SwingConstants.LEFT);
		label_3.setFont(new Font("Tahoma", Font.PLAIN, 12));
		label_3.setBounds(30, 143, 133, 26);
		getContentPane().add(label_3);
		
		JLabel lblTiempoTotal = new JLabel("Tiempo total:");
		lblTiempoTotal.setVerticalAlignment(SwingConstants.TOP);
		lblTiempoTotal.setHorizontalAlignment(SwingConstants.LEFT);
		lblTiempoTotal.setFont(new Font("Tahoma", Font.PLAIN, 12));
		lblTiempoTotal.setBounds(30, 175, 133, 26);
		getContentPane().add(lblTiempoTotal);
		
		JLabel label_5 = new JLabel("Importe Turno:");
		label_5.setVerticalAlignment(SwingConstants.TOP);
		label_5.setHorizontalAlignment(SwingConstants.LEFT);
		label_5.setFont(new Font("Tahoma", Font.PLAIN, 12));
		label_5.setBounds(30, 207, 108, 26);
		getContentPane().add(label_5);
		
		fieldHoraInicio = new JTextField();
		fieldHoraInicio.setText(horaEntrada);
		fieldHoraInicio.setHorizontalAlignment(SwingConstants.CENTER);
		fieldHoraInicio.setFont(new Font("Tahoma", Font.PLAIN, 12));
		fieldHoraInicio.setColumns(10);
		fieldHoraInicio.setBounds(151, 106, 107, 26);
		getContentPane().add(fieldHoraInicio);
		
		fieldHoraFin = new JTextField();
		fieldHoraFin.setText(horaSalida);
		fieldHoraFin.setHorizontalAlignment(SwingConstants.CENTER);
		fieldHoraFin.setFont(new Font("Tahoma", Font.PLAIN, 12));
		fieldHoraFin.setColumns(10);
		fieldHoraFin.setBounds(151, 138, 107, 26);
		getContentPane().add(fieldHoraFin);
		
		textField_3 = new JTextField();
		textField_3.setText(tiempo);
		textField_3.setHorizontalAlignment(SwingConstants.CENTER);
		textField_3.setFont(new Font("Tahoma", Font.PLAIN, 12));
		textField_3.setEditable(false);
		textField_3.setColumns(10);
		textField_3.setBounds(151, 170, 107, 26);
		getContentPane().add(textField_3);
		
		fieldMontoTurno = new JTextField();
		fieldMontoTurno.setText(importe);
		fieldMontoTurno.setHorizontalAlignment(SwingConstants.CENTER);
		fieldMontoTurno.setFont(new Font("Tahoma", Font.PLAIN, 12));
		fieldMontoTurno.setColumns(10);
		fieldMontoTurno.setBounds(151, 202, 107, 26);
		getContentPane().add(fieldMontoTurno);
		
		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setBounds(384, 42, 335, 218);
		getContentPane().add(scrollPane);
		table = new JTable();
		scrollPane.setName("consumiciones");
		scrollPane.setViewportView(table);
		table.setModel(new DefaultTableModel(listaConsumiciones,new String[] {"Cantidad", "Detalle", "Importe"}) 
		{
			boolean[] columnEditables = new boolean[] {
				false, false, false
			};
			public boolean isCellEditable(int row, int column) {
				return columnEditables[column];
			}
		});
		table.getColumnModel().getColumn(0).setPreferredWidth(56);
		table.getColumnModel().getColumn(1).setPreferredWidth(174);
		table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

		
		JLabel label_7 = new JLabel("Total Consumiciones:  $");
		label_7.setHorizontalAlignment(SwingConstants.RIGHT);
		label_7.setFont(new Font("Tahoma", Font.PLAIN, 12));
		label_7.setBounds(357, 271, 235, 26);
		getContentPane().add(label_7);
		
		textField_7 = new JTextField();
		textField_7.setText(importeConsumiciones);
		textField_7.setHorizontalAlignment(SwingConstants.LEFT);
		textField_7.setFont(new Font("Tahoma", Font.PLAIN, 12));
		textField_7.setEditable(false);
		textField_7.setColumns(10);
		textField_7.setBounds(598, 271, 62, 26);
		getContentPane().add(textField_7);
		
		JLabel label_8 = new JLabel("Total Turno:  $");
		label_8.setHorizontalAlignment(SwingConstants.RIGHT);
		label_8.setFont(new Font("Tahoma", Font.BOLD, 14));
		label_8.setBounds(733, 273, 108, 22);
		getContentPane().add(label_8);
		
		textField_8 = new JTextField();
		textField_8.setText(total);
		textField_8.setHorizontalAlignment(SwingConstants.LEFT);
		textField_8.setFont(new Font("Tahoma", Font.BOLD, 14));
		textField_8.setEditable(false);
		textField_8.setColumns(10);
		textField_8.setBorder(null);
		textField_8.setBounds(842, 274, 69, 21);
		getContentPane().add(textField_8);
		
		JSeparator separator = new JSeparator();
		separator.setForeground(Color.GRAY);
		separator.setBounds(733, 271, 166, 1);
		getContentPane().add(separator);
		
		JSeparator separator_1 = new JSeparator();
		separator_1.setForeground(Color.GRAY);
		separator_1.setBounds(733, 297, 166, 1);
		getContentPane().add(separator_1);
		
		JButton button_1 = new JButton("Aceptar");
		button_1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				String [] horaInicio = fieldHoraInicio.getText().split(":");
				String [] horaFin = fieldHoraFin.getText().split(":");
				Date diaSeleccionado = dateChooser.getDate();
				String nombreHabitacion = (String) comboHabitacion.getSelectedItem();
				double montoTurno = -1;
				boolean validado = true;
				try{
					montoTurno = new Double(fieldMontoTurno.getText());
				}
				catch(Exception e){
					validado = false;
					//el monto seleccionado no es valido.
					MainFrame.getInstance().showMessage(MessageType.ERROR, "El monto ingresado no es v\u00E1lido");
				}
				
				if(diaSeleccionado==null){
					validado = false;
					//el dia seleccionado no es valido.
					MainFrame.getInstance().showMessage(MessageType.ERROR, "El d\u00EDa seleccionado no es v\u00E1lido");
				}
				
				int horasInicio = -1;
				Date fechaInicio = null;
				try{
					horasInicio = new Integer(horaInicio[0]);
					int minutosInicio = new Integer(horaInicio[1]);
					int segundosInicio = new Integer(horaInicio[2]);
					if(horasInicio>23 || horasInicio < 0) throw new Exception();
					if(minutosInicio>59 || minutosInicio < 0) throw new Exception();
					if(segundosInicio>59 || segundosInicio < 0) throw new Exception();
					fechaInicio = new Date(diaSeleccionado.getTime());
					fechaInicio.setSeconds(segundosInicio);
					fechaInicio.setMinutes(minutosInicio);
					fechaInicio.setHours(horasInicio);
				}catch(Exception e){
					validado = false;
					//LA HORA INGRESADA NO ES VALIDA
					MainFrame.getInstance().showMessage(MessageType.ERROR, "La hora de inicio no es v\u00E1lida");
					
				}
				Date fechaFin = null ;
				try{
					int horasFin = new Integer(horaFin[0]);
					int minutosFin = new Integer(horaFin[1]);
					int segundosFin = new Integer(horaFin[2]);
					if(horasFin>23 || horasFin < 0) throw new Exception();
					if(minutosFin>59 || minutosFin < 0) throw new Exception();
					if(segundosFin>59 || segundosFin < 0) throw new Exception();
					fechaFin = new Date(diaSeleccionado.getTime());
					fechaFin.setSeconds(segundosFin);
					fechaFin.setMinutes(minutosFin);
					fechaFin.setHours(horasFin);
					if(horasInicio>horasFin){
						fechaFin.setDate(fechaFin.getDay()+1);
					}
				}catch(Exception e){
					validado = false;
					//LA HORA INGRESADA NO ES VALIDA
					MainFrame.getInstance().showMessage(MessageType.ERROR, "La hora de fin no es v\u00E1lida");
					
				}
				if(validado){
					ControlTurno.getInstance().modificarTurno(montoTurno,fechaInicio,fechaFin,nombreHabitacion);
					dispose();
				}

				
			}
		});
		button_1.setForeground(Color.BLACK);
		button_1.setFont(new Font("Tahoma", Font.PLAIN, 12));
		button_1.setBorder(UIManager.getBorder("Button.border"));
		button_1.setBackground(SystemColor.activeCaptionBorder);
		button_1.setBounds(713, 326, 84, 26);
		getContentPane().add(button_1);
		
		JButton button_3 = new JButton("Cancelar");
		button_3.setForeground(Color.BLACK);
		button_3.setFont(new Font("Tahoma", Font.PLAIN, 12));
		button_3.setBorder(UIManager.getBorder("Button.border"));
		button_3.setBackground(SystemColor.activeCaptionBorder);
		button_3.setBounds(815, 326, 84, 26);
		getContentPane().add(button_3);
		button_3.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				dispose();		
			}
		});
		
		JButton button_4 = new JButton("<html><center>Eliminar</center><center>Consumici\u00F3n</center></html>");
		button_4.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				int row = (table).getSelectedRow();
				if(row>-1){
					ControlTurno.getInstance().eliminarConsumicion((String) habitacionSeleccionada,row);
				}
				else{
					MainFrame.getInstance().showMessage(MessageType.ERROR, "No ha seleccionado ninguna consumici\u00F3n"); //NO SELECCIONO FILA
				}
			}
		});
		button_4.setForeground(Color.BLACK);
		button_4.setFont(new Font("Tahoma", Font.PLAIN, 12));
		button_4.setBorder(UIManager.getBorder("Button.border"));
		button_4.setBackground(SystemColor.activeCaptionBorder);
		button_4.setBounds(760, 156, 119, 58);
		getContentPane().add(button_4);
		
		JButton button_5 = new JButton("<html><center>Agregar</center><center>Consumici\u00F3n</center></html>");
		button_5.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				ControlTurno.getInstance().mostrarAgregarConsumicion(habitacionSeleccionada);
			}
		});
		button_5.setForeground(Color.BLACK);
		button_5.setFont(new Font("Tahoma", Font.PLAIN, 12));
		button_5.setBorder(UIManager.getBorder("Button.border"));
		button_5.setBackground(SystemColor.activeCaptionBorder);
		button_5.setBounds(760, 84, 119, 58);
		getContentPane().add(button_5);
		
		comboHabitacion = new JComboBox  <String> (habitaciones);
		comboHabitacion.setBounds(151, 42, 107, 26);
		comboHabitacion.setSelectedItem(habitacionSeleccionada);
		getContentPane().add(comboHabitacion);
		
		dateChooser = new JDateChooser(fecha);
		dateChooser.setBounds(151, 74, 107, 26);
		getContentPane().add(dateChooser);
		
		setVisible(true);
		
	}
	
	public void agregarFilaConsumicion(Object[] fila){
		((DefaultTableModel) table.getModel()).addRow(fila);
	}
	
	public void eliminarFilaConsumicion(int row){
		((DefaultTableModel) table.getModel()).removeRow(row);
	}
}
